/*
 * @Author: fengxx
 * @Date: 2025-09-05 09:19:27
 * @LastEditors: fengxx
 * @LastEditTime: 2025-10-16 16:10:03
 */
import {
  // createMemoryHistory,
  createRouter,
  // createWebHashHistory,
  createWebHistory,
} from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
// import BasicLayout from '@/layouts/BasicLayout.vue'
// import HomeView from '../views/HomeView.vue'
import menuRoutes from './menuRoutes'

interface MetaType {
  title?: string
  icon: string
}
interface MenuRoute {
  path: string
  component: string
  name: string
  meta?: MetaType
  children?: MenuRoute[]
}

// 自动导入 views 目录下的所有 .vue 文件
const modules = import.meta.glob('@/views/**/**/*.vue')

/**
 * 将后端返回的路由数据转换为 vue-router 路由对象
 * @param {Array} routes - 后端返回的路由数组
 * @returns {Array}
 */

const transformRoutes = (routes: MenuRoute[]): RouteRecordRaw[] => {
  return routes.map((route) => {
    const { component, children } = route

    const newRoute: RouteRecordRaw = { ...route }

    // 处理 component
    if (component === 'BasicLayout') {
      newRoute.component = () => import('@/layouts/BasicLayout.vue')
    } else {
      const url = `/src/views/${component}.vue`
      newRoute.component = modules[url]
      // newRoute.component = import(`/src/views/${component}.vue`)
    }

    // 递归处理 children
    if (children && children.length > 0) {
      newRoute.children = transformRoutes(children)
    }

    return newRoute
  })
}

const routes = [
  ...transformRoutes(menuRoutes),
  {
    path: '/login',
    name: 'login',
    component: () => import('@/views/User/LoginView.vue'),
    meta: {
      title: '登录',
    },
    // 某个路由独享的守卫
    // beforeEnter: (to, from, next) => {
    //   console.log('9999')
    //   if (to.path !== '/login') {
    //     console.log('lloklo')
    //     next()
    //   } else {
    //     next()
    //   }
    //   // reject the navigation
    //   // return false
    // },
  },
  {
    path: '/:pathMatch(.*)*',
    name: 'NotFound',
    component: () => import('@/views/NotFound.vue'),
  },
]

// 根组件直接命名视图
// const routes = [
//   {
//     path: '/:id',
//     // 当一个页面需要显示多分routeview组件时，可以通过name进行区分
//     // 在路由表中需要用 components 包裹不同路由组件
//     components: {
//       default: HomeView,
//       LeftSidebar: BasicLayout,
//       RightSidebar: BasicLayout,
//     },
//     // 手动配置路由传参传到哪个对应的组件上
//     props: { default: true, LeftSidebar: false },
//   },
// ]

// 子组件对应的命名视图
// const routes = [
//   {
//     path: '/',
//     component: BasicLayout,
//     children: [
//       {
//         path: 'll',
//         components: {
//           default: HomeView,
//           LeftSidebar: HomeView,
//           RightSidebar: HomeView,
//         },
//       },
//     ],
//   },
// ]

// const routes = [
//   {
//     path: '/user',
//     name: 'user',
//     component: BasicLayout,
//     meta: {
//       title: '用户模块',
//     },
//     children: [
//       {
//         path: 'list',
//         name: 'userList',
//         component: () => import('../views/UserList.vue'),
//         meta: {
//           title: '用户列表',
//         },
//       },
//     ],
//   },
//   {
//     // 嵌套路由的根路径必须以 / 开头
//     path: '/',
//     component: BasicLayout,
//     name: 'father',
//     children: [
//       // 首页
//       {
//         path: '',
//         name: 'home',
//         // 当前路由会被重定向到redirect路由
//         // 使用了重定向则component无效，所以建议删除该属性
//         // redirect: '/login',
//         // redirect: { name: 'login' },
//         // redirect: (to) => {
//         //   // ⽅法接收⽬标路由作为参数
//         //   // return 重定向的字符串路径/路径对象
//         //   return { path: '/about', query: { q: to.params.aboutId } }
//         // },
//         component: HomeView,
//         // 别名：作为备选path（路径别名）
//         // alias: '/home1',
//         // 多个别名：用数组处理
//         // alias: ['/home1', '/home2'],

//         // 动态参数
//         // props: true,
//         // 路由的静态参数（参数的名称和值是确定的）
//         // props: { newsletterPopup: true, age: 18 },
//         // 函数传参形式
//         // props: (route) => ({ query: route.query.q, age: 18 }),
//         meta: {
//           title: '首页',
//         },
//       },
//       // 待办
//       {
//         path: 'todo',
//         name: 'todo',
//         component: () => import('../views/TodoList.vue'),
//       },
//       {
//         path: 'todoDetail',
//         name: 'todoDetail',
//         component: () => import('../views/TodoDetail.vue'),
//       },
//       {
//         // 动态传参，动态字段以冒号开始(*代表0个以上，+代表1个以上)
//         path: 'about/:aboutId(\\d+)*',
//         name: 'about',
//         // route level code-splitting
//         // this generates a separate chunk (About.[hash].js) for this route
//         // which is lazy-loaded when the route is visited.
//         component: () => import('../views/AboutView.vue'),
//         // 传参以prop形式进行
//         props: true,
//       },
//       // {
//       //   path: 'userList/:userId?',
//       //   name: 'userList',
//       //   component: () => import('../views/UserList.vue'),
//       // },
//       {
//         path: 'test/:id?',
//         name: 'test',
//         component: () => import('@/views/TestView.vue'),
//       },
//       {
//         path: 'productList',
//         name: 'productList',
//         component: () => import('@/views/Product/ProductList.vue'),
//       },
//       {
//         path: 'counterApp',
//         name: 'counterApp',
//         component: () => import('@/views/Counter/CounterApp.vue'),
//       },
//     ],
//   },
//   {
//     path: '/login',
//     name: 'login',
//     component: () => import('@/views/User/LoginView.vue'),
//   },
//   // 匹配任意路径（如果当前路由的path在路由表中能找到，就显示当前路由的component，如果找不到就显示NotFound对应的component）
//   {
//     path: '/:pathMatch(.*)*',
//     name: 'NotFound',
//     component: () => import('@/views/NotFound.vue'),
//   },
// ]
console.log(routes)

const router = createRouter({
  // hash模式（在路由后加#）
  // history: createWebHashHistory(),
  // memory模式（用于虚拟环境，不支持历史的返回和前进）
  // history: createMemoryHistory(),
  history: createWebHistory(import.meta.env.BASE_URL),
  routes,
  // 区分最后的/
  // strict: true,
  // 区分大小写
  // sensitive: true,
})

// // 路由即将进入导航页面之前的动作
// // to: 即将进入的路由信息
// // from: 进入当前路由的来源路由
// // next: 与return类似，守卫的结果操作（最后具体跳转到哪个路由）
// router.beforeEach(async (to, from) => {
//   console.log('ppp')
//   // console.log(to, from)
//   // if (!!localStorage.get('token')) {
//   //   next()
//   // } else {
//   //   next('/login?redict=/home')
//   // }

//   //  if (
//   //  // 检查⽤户是否已登录
//   //  !isAuthenticated &&
//   //  // ❗❗ 避免⽆限重定向
//   //  to.name !== 'Login'
//   //  ) {
//   //  // 将⽤户重定向到登录⻚⾯
//   // return { name: 'login' }
//   //  }
//   // return false
//   if (to.path == '/todo') {
//     // 进入其他页面或者不进入
//     return false
//     // next('/login')
//   } else {
//     // 返回到当前页面
//     return true
//     // next()
//   }
// })

// // 在router.beforeEach后执行
// // 如果⽤户⽆法进⼊⻚⾯时你希望避免执⾏的操作
// router.beforeResolve(async (to, from) => {
//   console.log('lll')
//   //  if (to.meta.requiresCamera) {
//   //  try {
//   //  await askForCameraPermission()
//   //  } catch (error) {
//   //  if (error instanceof NotAllowedError) {
//   //  // ... 处理错误，然后取消导航
//   //  return false
//   //  } else {
//   //  // 意料之外的错误，取消导航并把错误传给全局处理器
//   //  throw error
//   //  }
//   //  }
//   //  }
// })

// 路由已经导航成功
// router.afterEach((to, from, failure) => {
//   // 导航失败的相关处理机制
//   if (!failure) {
//     console.log('lolo')
//     document.title = `智能学生考勤系统-${to.meta.title}`
//   } else {
//     console.log('popo')
//   }
//   console.log('mmm', to.fullPath)
// })

export default router
